package com.dog.basics.common.util;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;

import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;

/**
 * @description: 便捷通用工具
 * @author: He
 * @date: Created in 2020/5/21 17:10
 * @version: 1.0
 * @modified By:
 */
public  class ToolUtil {

    /**
     * @功能描述: 秒格式化为毫秒
     * @author He
     * @date 2020/5/21
     */
    public static Long dateMillisecond(Long date){
        // 判断是否已为空
        if (ObjectUtil.isNotNull(date)){
            return  (date * 1000L);
        }
        return null;
    }
    /**
     * @功能描述: 毫秒格式化为秒 (Date类型)
     * @author He
     * @date 2020/5/21
     */
    public static Long dateSecond(DateTime date){
        // 判断是否已为空
        if (ObjectUtil.isNotNull(date)){
            return  (date.getTime() / 1000L);
        }
        return null;
    }
    /**
     * @功能描述: 毫秒格式化为秒 (Long类型)
     * @author He
     * @date 2020/5/21
     */
    public static Long dateSecond(Long date){
        // 判断是否已为空
        if (ObjectUtil.isNotNull(date)){
            return  (date / 1000L);
        }
        return null;
    }
    /**
     * @功能描述: 获取两个时间的月差
     * @author wph
     * @date 2020/5/21
     */
    public static Integer getMonth(Long startTim, Long endTime) {
        LocalDate startTimeNew = DateUtil.date(dateMillisecond(startTim)).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate endTimeNew = DateUtil.date(dateMillisecond(endTime)).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        Integer month =(int) ChronoUnit.MONTHS.between(startTimeNew, endTimeNew);
        return month+1;
    }
    /**
     * @功能描述: 获取两个时间的月差
     * @author wph
     * @date 2020/5/21
     */
    public static Integer getMonth(DateTime startTim, DateTime endTime) {
        LocalDate startTimeNew = startTim.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate endTimeNew = endTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        Integer month =(int) ChronoUnit.MONTHS.between(startTimeNew, endTimeNew);
        return month+1;
    }
}

